AWS Copilot CLIで作成したAWS App Runnerに、既存のAWS WAFをサクッとアタッチしてみる
こんにちは、筧 剛彰( @TakaakiKakei )です。
今回は、AWS のコマンドラインツールである AWS Copilot CLI で作成した AWS App Runner に、既存の AWS WAF をアタッチする方法をご紹介します。
AWS Copilot CLI とは?
AWS Copilot CLI は、AWS が提供するコマンドラインツールで、AWS App Runner や AWS Fargate などを容易にデプロイできるツールです。先日、私自身が AWS Copilot CLI を使って AWS App Runner を作成し、それに既存の AWS WAF をアタッチしたいと思ったところ、思いの外スムーズに設定できたため、その手順を共有させていただきます。
AWS Copilot CLI を用いる利点
AWS Copilot CLI を利用すると、addons
フォルダ内にwaf.yml
とaddons.parameters.yml
という 2 つのファイルを生成するだけで、既存の AWS WAF を AWS App Runner に容易にアタッチできます。それでは、以下の手順で試してみましょう。
手順
AWS Copilot CLI の設定と準備
この記事では、既に AWS Copilot CLI がダウンロード・セットアップ済みであることを前提とします。まだセットアップしていない方は、以下のリンクを参考にセットアップをお願いします。
- AWS Copilot CLI のインストールガイド
- AWS CLI のインストールガイド
- 起動済の Docker(Rancher Desktopなどを利用)
- AWS の認証設定
サンプルコードの取得
まずは公式から提供されているサンプルコードを利用します。
git clone https://github.com/aws-samples/aws-copilot-sample-service
AWS App Runner の作成
AWS Copilot CLI では、Manifest という概念を用います。これは、AWS Copilot CLI で作成するソフトウェアアーキテクチャの種類を定義するものです。例えば次のような Manifest を選択できます。
・"Request-Driven Web Service" - Service 実行環境として AWS App Runner サービスを作成します。
・"Static Site" - 静的 Web サイト用に専用の CloudFront ディストリビューションと S3 バケットをプロビジョニングします。
・"Load Balanced Web Service" - Service 実行環境として Appplication Load Balancer (ALB)、Network Load Balancer、またはその両方を作成し、セキュリティグループ、ECS サービス (Fargate) を利用します。
今回は AWS App Runner を利用するため、Request-Driven Web Service を選択します。
それではまず、デプロイ先の AWS アカウントのプロファイルに切り替えます。今回は AWSume を利用して切り替えを行います。
awsume AWS プロファイル名
AWS Copilot CLI で、Request-Driven Web Service を作成します。copilot init
コマンドを利用すると、必要な環境を自動的に作成してくれます。
copilot init --app demo \ --name waf-example \ --type "Request-Driven Web Service" \ --dockerfile "./Dockerfile" \ --deploy
本番環境利用で利用する場合は、以下の公式記事を参考にステップバイステップで進めることをおすすめします。
copilot init
コマンドの実行が完了した後、AWS App Runnerからデフォルトエンドポイントが生成されます。それにアクセスし、動作確認を行います。下図のような画面が表示されればOKです。
既存の AWS WAF を AWS App Runner にアタッチする
AWS Copilot CLI を使用して、以下のフォルダ構造とファイルが生成されます。
. └── copilot/ └── waf-example/ # The name of your Request-Driven Web Service. Not necessarily "waf-example". └── manifest.yml
この中に addons
フォルダと、waf.yml
、addons.parameters.yml
ファイルを以下のように追加します。
. └── copilot/ └── waf-example/ # The name of your Request-Driven Web Service. Not necessarily "waf-example". ├── manifest.yml └── addons/
waf.yml
ファイルに以下の内容を記述します。``の箇所には、ご自身の AWS WAF Web ACLs の ARN を記入してください。
#Addon template to add WAF configuration to your App Runner service. Parameters: App: Type: String Description: Your application's name. Env: Type: String Description: The environment name your service, job, or workflow is being deployed to. Name: Type: String Description: The name of the service, job, or workflow being deployed. ServiceARN: Type: String Default: "" Description: The ARN of the service being deployed. Resources: # Configuration of the WAF Web ACL you want to asscoiate with # your App Runner service. Firewall: Metadata: 'aws:copilot:description': 'Associating your App Runner service with your WAF WebACL' Type: AWS::WAFv2::WebACLAssociation Properties: ResourceArn: !Sub ${ServiceARN} WebACLArn: <paste your WAF Web ACL ARN here> # Paste your WAF Web ACL ARN here.
AWS WAF Web ACLs の ARN は下図の画面から取得できます。
addons.parameters.yml
ファイルは以下のようになります。
Parameters: ServiceARN: !Ref Service
copilot svc deploy
コマンドを利用してデプロイすれば、既存の AWS WAF を AWS App Runner にアタッチできます。
copilot svc deploy
マネジメントコンソールでの確認
AWS Copilot CLI を使用して作成した AWS App Runner に既存の AWS WAF がアタッチされていることを確認しましょう。AWS マネージメントコンソールを開いて、AWS WAF のサービスページにおいて、対象の Web ACLs のAssociated AWS resources
を確認します。下図のような画面が表示されたら、設定成功です。
おかたづけ
AWS Copilot CLI で作成されたリソースは、copilot app delete
コマンドを利用して削除できます。
既存の AWS WAF は必要に応じてマネジメントコンソールから削除してください。
copilot app delete
おわりに
これまで AWS Lambda を主に使用してサービスの開発を行っていましたが、AWS Copilot CLI を通じて AWS App Runner や AWS Fargate の利用の簡便性を理解しました。今後はこれらのサービスを使う機会も増えそうです。もしまだ AWS Copilot CLI を試していない方がいらっしゃいましたら、ぜひ一度お試しください。
以上、AWS 事業本部の筧 剛彰( @TakaakiKakei )でした。